



<!doctype html>
<html lang="en" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      <meta http-equiv="x-ua-compatible" content="ie=edge">
      
        <meta name="description" content="Plasma a layer 2 scaling solution for Ethereum.">
      
      
      
      
        <meta name="lang:clipboard.copy" content="Copy to clipboard">
      
        <meta name="lang:clipboard.copied" content="Copied to clipboard">
      
        <meta name="lang:search.language" content="en">
      
        <meta name="lang:search.pipeline.stopwords" content="True">
      
        <meta name="lang:search.pipeline.trimmer" content="True">
      
        <meta name="lang:search.result.none" content="No matching documents">
      
        <meta name="lang:search.result.one" content="1 matching document">
      
        <meta name="lang:search.result.other" content="# matching documents">
      
        <meta name="lang:search.tokenizer" content="[\s\-]+">
      
      <link rel="shortcut icon" href="../../../assets/images/favicon.ico">
      <meta name="generator" content="mkdocs-1.1.2, mkdocs-material-3.3.0">
    
    
      
        <title>Plasma - EthHub</title>
      
    
    
      <link rel="stylesheet" href="../../../assets/stylesheets/application.63c76b3b.css">
      
        <link rel="stylesheet" href="../../../assets/stylesheets/application-palette.4637f1a4.css">
      
      
        
        
        <meta name="theme-color" content="">
      
    
    
      <script src="../../../assets/javascripts/modernizr.962652e9.js"></script>
    
    
      
        <link href="https://fonts.gstatic.com" rel="preconnect" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,400i,700|Roboto+Mono">
        <style>body,input{font-family:"Roboto","Helvetica Neue",Helvetica,Arial,sans-serif}code,kbd,pre{font-family:"Roboto Mono","Courier New",Courier,monospace}</style>
      
    
    <link rel="stylesheet" href="../../../assets/fonts/material-icons.css">
    
    
      <link rel="stylesheet" href="../../../extra.css">
    
    
      
        <script async src="https://www.googletagmanager.com/gtag/js?id=UA-125892125-2"></script>
<script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","UA-125892125-2")</script>
      
    
    
  </head>
  
    
    
    <body dir="ltr" data-md-color-primary="ethhub" data-md-color-accent="">
  
    <svg class="md-svg">
      <defs>
        
        
          <svg xmlns="http://www.w3.org/2000/svg" width="416" height="448"
    viewBox="0 0 416 448" id="__github">
  <path fill="currentColor" d="M160 304q0 10-3.125 20.5t-10.75 19-18.125
        8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19 18.125-8.5
        18.125 8.5 10.75 19 3.125 20.5zM320 304q0 10-3.125 20.5t-10.75
        19-18.125 8.5-18.125-8.5-10.75-19-3.125-20.5 3.125-20.5 10.75-19
        18.125-8.5 18.125 8.5 10.75 19 3.125 20.5zM360
        304q0-30-17.25-51t-46.75-21q-10.25 0-48.75 5.25-17.75 2.75-39.25
        2.75t-39.25-2.75q-38-5.25-48.75-5.25-29.5 0-46.75 21t-17.25 51q0 22 8
        38.375t20.25 25.75 30.5 15 35 7.375 37.25 1.75h42q20.5 0
        37.25-1.75t35-7.375 30.5-15 20.25-25.75 8-38.375zM416 260q0 51.75-15.25
        82.75-9.5 19.25-26.375 33.25t-35.25 21.5-42.5 11.875-42.875 5.5-41.75
        1.125q-19.5 0-35.5-0.75t-36.875-3.125-38.125-7.5-34.25-12.875-30.25-20.25-21.5-28.75q-15.5-30.75-15.5-82.75
        0-59.25 34-99-6.75-20.5-6.75-42.5 0-29 12.75-54.5 27 0 47.5 9.875t47.25
        30.875q36.75-8.75 77.25-8.75 37 0 70 8 26.25-20.5
        46.75-30.25t47.25-9.75q12.75 25.5 12.75 54.5 0 21.75-6.75 42 34 40 34
        99.5z" />
</svg>
        
      </defs>
    </svg>
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" data-md-component="overlay" for="__drawer"></label>
    
      <a href="#plasma" tabindex="1" class="md-skip">
        Skip to content
      </a>
    
    
      <header class="md-header" data-md-component="header">
  <nav class="md-header-nav md-grid">
    <div class="md-flex">
      <div class="md-flex__cell md-flex__cell--shrink">
        <a href="../../.." title="EthHub" class="md-header-nav__button md-logo">
          
            <img src="../../../logo.png" width="24" height="24">
          
        </a>
      </div>
      <div class="md-flex__cell md-flex__cell--shrink">
        <label class="md-icon md-icon--menu md-header-nav__button" for="__drawer"></label>
      </div>
      <div class="md-flex__cell md-flex__cell--stretch">
        <div class="md-flex__ellipsis md-header-nav__title" data-md-component="title">
          
            
              <span class="md-header-nav__topic">
                EthHub
              </span>
              <span class="md-header-nav__topic">
                Plasma - EthHub
              </span>
            
          
        </div>
      </div>
      <div class="md-flex__cell md-flex__cell--shrink">
        
          
            <label class="md-icon md-icon--search md-header-nav__button" for="__search"></label>
            
<div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="query" data-md-state="active">
      <label class="md-icon md-search__icon" for="__search"></label>
      <button type="reset" class="md-icon md-search__icon" data-md-component="reset" tabindex="-1">
        &#xE5CD;
      </button>
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" data-md-scrollfix>
        <div class="md-search-result" data-md-component="result">
          <div class="md-search-result__meta">
            Type to start searching
          </div>
          <ol class="md-search-result__list"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
          
        
      </div>
      
        <div class="md-flex__cell md-flex__cell--shrink">
          <div class="md-header-nav__source">
            


  


  <a href="https://github.com/ethhub-io/ethhub-zh/" title="Go to repository" class="md-source" data-md-source="github">
    
      <div class="md-source__icon">
        <svg viewBox="0 0 24 24" width="24" height="24">
          <use xlink:href="#__github" width="24" height="24"></use>
        </svg>
      </div>
    
    <div class="md-source__repository">
      ethhub-io/ethhub-zh
    </div>
  </a>

          </div>
        </div>
      
    </div>
  </nav>
</header>
    
    <div class="md-container">
      
        
      
      
        

<nav class="md-tabs" data-md-component="tabs">
  <div class="md-tabs__inner md-grid">
    <ul class="md-tabs__list">
      
        
  <li class="md-tabs__item">
    
      <a href="../../.." title="首页" class="md-tabs__link md-tabs__link--active">
        首页
      </a>
    
  </li>

      
        
      
        
      
        
      
        
      
        
  
  
    <li class="md-tabs__item">
      
        <a href="../../../ethereum-basics/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%98%AF%E4%BB%80%E4%B9%88/" title="以太坊基础" class="md-tabs__link">
          以太坊基础
        </a>
      
    </li>
  

      
        
  
  
    
    
  
  
    <li class="md-tabs__item">
      
        <a href="../../ethereum-2.0/%E4%BB%A5%E5%A4%AA%E5%9D%8A2.0%E5%90%84%E9%98%B6%E6%AE%B5/" title="以太坊路线图" class="md-tabs__link">
          以太坊路线图
        </a>
      
    </li>
  

  

      
        
  
  
    <li class="md-tabs__item">
      
        <a href="../../../using-ethereum/%E5%A6%82%E4%BD%95%E8%B4%AD%E4%B9%B0ETH/" title="使用以太坊" class="md-tabs__link">
          使用以太坊
        </a>
      
    </li>
  

      
    </ul>
  </div>
</nav>
      
      <main class="md-main">
        <div class="md-main__inner md-grid" data-md-component="container">
          
            
              <div class="md-sidebar md-sidebar--primary" data-md-component="navigation">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    <nav class="md-nav md-nav--primary" data-md-level="0">
  <label class="md-nav__title md-nav__title--site" for="__drawer">
    <a href="../../.." title="EthHub" class="md-nav__button md-logo">
      
        <img src="../../../logo.png" width="48" height="48">
      
    </a>
    EthHub
  </label>
  
    <div class="md-nav__source">
      


  


  <a href="https://github.com/ethhub-io/ethhub-zh/" title="Go to repository" class="md-source" data-md-source="github">
    
      <div class="md-source__icon">
        <svg viewBox="0 0 24 24" width="24" height="24">
          <use xlink:href="#__github" width="24" height="24"></use>
        </svg>
      </div>
    
    <div class="md-source__repository">
      ethhub-io/ethhub-zh
    </div>
  </a>

    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
      


  <li class="md-nav__item">
    <a href="../../.." title="首页" class="md-nav__link">
      首页
    </a>
  </li>

    
      
      
      


  <li class="md-nav__item">
    <a href="../../../ethereum-basics/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%98%AF%E4%BB%80%E4%B9%88/" title="文档" class="md-nav__link">
      文档
    </a>
  </li>

    
      
      
      


  <li class="md-nav__item">
    <a href="https://podcast.ethhub.io" title="播客" class="md-nav__link">
      播客
    </a>
  </li>

    
      
      
      


  <li class="md-nav__item">
    <a href="https://ethhub.substack.com/" title="新闻" class="md-nav__link">
      新闻
    </a>
  </li>

    
      
      
      


  <li class="md-nav__item">
    <a href="https://shop.ethhub.io" title="商城" class="md-nav__link">
      商城
    </a>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-6" type="checkbox" id="nav-6">
    
    <label class="md-nav__link" for="nav-6">
      以太坊基础
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
      <label class="md-nav__title" for="nav-6">
        以太坊基础
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../../ethereum-basics/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%98%AF%E4%BB%80%E4%B9%88/" title="以太坊是什么？" class="md-nav__link">
      以太坊是什么？
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../ethereum-basics/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E8%B4%A7%E5%B8%81%E6%94%BF%E7%AD%96/" title="以太坊货币政策" class="md-nav__link">
      以太坊货币政策
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7" type="checkbox" id="nav-7">
    
    <label class="md-nav__link" for="nav-7">
      以太坊路线图
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
      <label class="md-nav__title" for="nav-7">
        以太坊路线图
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7-1" type="checkbox" id="nav-7-1">
    
    <label class="md-nav__link" for="nav-7-1">
      以太坊 2.0
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="2">
      <label class="md-nav__title" for="nav-7-1">
        以太坊 2.0
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../ethereum-2.0/%E4%BB%A5%E5%A4%AA%E5%9D%8A2.0%E5%90%84%E9%98%B6%E6%AE%B5/" title="以太坊2.0各阶段" class="md-nav__link">
      以太坊2.0各阶段
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../ethereum-2.0/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%9D%83%E7%9B%8A%E8%AF%81%E6%98%8E/" title="以太坊权益证明" class="md-nav__link">
      以太坊权益证明
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../ethereum-2.0/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E4%B8%AD%E7%9A%84%E5%88%86%E7%89%87/" title="以太坊中的分片" class="md-nav__link">
      以太坊中的分片
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../ethereum-2.0/%E4%BB%A5%E5%A4%AA%E5%9D%8A2.0%E7%BB%8F%E6%B5%8E%E5%AD%A6/" title="以太坊2.0经济学" class="md-nav__link">
      以太坊2.0经济学
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../ethereum-2.0/%E4%BB%8E%E4%BB%A5%E5%A4%AA%E5%9D%8A1.0%E8%BF%81%E7%A7%BB%E5%88%B0%E4%BB%A5%E5%A4%AA%E5%9D%8A2.0/" title="从以太坊1.0迁移到以太坊2.0" class="md-nav__link">
      从以太坊1.0迁移到以太坊2.0
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../%E4%BB%A5%E5%A4%AA%E5%9D%8A1.x/" title="以太坊1.x" class="md-nav__link">
      以太坊1.x
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-7-3" type="checkbox" id="nav-7-3">
    
    <label class="md-nav__link" for="nav-7-3">
      Layer 2 扩容方案
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="2">
      <label class="md-nav__title" for="nav-7-3">
        Layer 2 扩容方案
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../zk-rollups/" title="ZK-Rollups" class="md-nav__link">
      ZK-Rollups
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../optimistic_rollups/" title="Optimistic Rollups" class="md-nav__link">
      Optimistic Rollups
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
      </ul>
    </nav>
  </li>

    
      
      
      


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8" type="checkbox" id="nav-8">
    
    <label class="md-nav__link" for="nav-8">
      使用以太坊
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="1">
      <label class="md-nav__title" for="nav-8">
        使用以太坊
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/%E5%A6%82%E4%BD%95%E8%B4%AD%E4%B9%B0ETH/" title="如何购买ETH" class="md-nav__link">
      如何购买ETH
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/%E8%BF%90%E8%A1%8C%E4%BB%A5%E5%A4%AA%E5%9D%8A%E8%8A%82%E7%82%B9/" title="运行以太坊节点" class="md-nav__link">
      运行以太坊节点
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item md-nav__item--nested">
    
      <input class="md-toggle md-nav__toggle" data-md-toggle="nav-8-3" type="checkbox" id="nav-8-3">
    
    <label class="md-nav__link" for="nav-8-3">
      钱包
    </label>
    <nav class="md-nav" data-md-component="collapsible" data-md-level="2">
      <label class="md-nav__title" for="nav-8-3">
        钱包
      </label>
      <ul class="md-nav__list" data-md-scrollfix>
        
        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/wallets/%E4%BB%8B%E7%BB%8D%E4%BB%A5%E5%A4%AA%E5%9D%8A%E9%92%B1%E5%8C%85/" title="介绍以太坊钱包" class="md-nav__link">
      介绍以太坊钱包
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/wallets/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%99%BA%E8%83%BD%E5%90%88%E7%BA%A6%E9%92%B1%E5%8C%85/" title="以太坊智能合约钱包" class="md-nav__link">
      以太坊智能合约钱包
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/wallets/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%A1%AC%E4%BB%B6%E9%92%B1%E5%8C%85/" title="以太坊硬件钱包" class="md-nav__link">
      以太坊硬件钱包
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/wallets/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E7%A7%BB%E5%8A%A8%E9%92%B1%E5%8C%85/" title="以太坊移动钱包" class="md-nav__link">
      以太坊移动钱包
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/wallets/%E4%BB%A5%E5%A4%AA%E5%9D%8A%E6%A1%8C%E9%9D%A2%E9%92%B1%E5%8C%85/" title="以太坊桌面钱包" class="md-nav__link">
      以太坊桌面钱包
    </a>
  </li>

        
          
          
          


  <li class="md-nav__item">
    <a href="../../../using-ethereum/wallets/web.md" title="以太坊网页钱包" class="md-nav__link">
      以太坊网页钱包
    </a>
  </li>

        
      </ul>
    </nav>
  </li>

        
      </ul>
    </nav>
  </li>

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              <div class="md-sidebar md-sidebar--secondary" data-md-component="toc">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    
<nav class="md-nav md-nav--secondary">
  
  
    
  
  
    <label class="md-nav__title" for="__toc">Table of contents</label>
    <ul class="md-nav__list" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#what-is-plasma" title="What is Plasma?" class="md-nav__link">
    What is Plasma?
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#how-does-plasma-work" title="How does Plasma work?" class="md-nav__link">
    How does Plasma work?
  </a>
  
    <nav class="md-nav">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#fraud-proofs" title="Fraud Proofs" class="md-nav__link">
    Fraud Proofs
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#plasma-pros-and-cons" title="Plasma: Pros and Cons" class="md-nav__link">
    Plasma: Pros and Cons
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#exploring-popular-plasma-flavours" title="Exploring popular plasma flavours" class="md-nav__link">
    Exploring popular plasma flavours
  </a>
  
    <nav class="md-nav">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#comparing-different-models-of-plasma" title="Comparing different models of plasma" class="md-nav__link">
    Comparing different models of plasma
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#resources" title="Resources" class="md-nav__link">
    Resources
  </a>
  
</li>
      
      
      
      
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          <div class="md-content">
            <article class="md-content__inner md-typeset">
              
                
                  <a href="https://github.com/ethhub-io/ethhub-zh/edit/master/docs/ethereum-roadmap/layer-2-scaling/plasma.md" title="Edit this page" class="md-icon md-content__icon">&#xE3C9;</a>
                
                
                <h1 id="plasma">Plasma</h1>
<h2 id="what-is-plasma">What is Plasma?</h2>
<p>Plasma is a layer-2 scaling solution that was originally proposed by Joseph Poon and Vitalik Buterin in their paper <a href="https://plasma.io/plasma.pdf">Plasma: Scalable Autonomous Smart Contracts</a>. It is a framework for building scalable applications.</p>
<p>Plasma uses a combination of smart contracts and cryptographic verification. Together, these enable fast and cheap transactions by offloading these transactions from the main Ethereum blockchain into a "side" chain (sometimes referred as child or plasma chains). These side chains periodically report back to the main chain and use it to settle any disputes (almost like a higher court).</p>
<p><strong>Why it is needed</strong></p>
<p>According to Vitalik Buterin,<br/> 
<em>it is a "bad idea" to build sophisticated features into the base layer of the blockchain, it would create a high level of governance overhead as the platform would have to continually discuss, implement and coordinate newly discovered technical improvements. The time intensive task to add a new feature into the base protocol might cause Ethereum to stagnate. We should not only be relying on changes to the base protocol to continue progressing Ethereum. I do think that as blockchains become more and more mature, layer 1 will necessarily stabilize, and layer 2 will take on more and more of the burden of ongoing innovation and change.</em></p>
<h2 id="how-does-plasma-work">How does Plasma work?</h2>
<p>The Plasma structure is built through the use of smart contracts and Merkle trees, enabling the creation of an unlimited number of child chains - which are, essentially, smaller copies of the parent Ethereum blockchain. Each chain is designed to work in a singular way, serving different needs by coexisting and operating independently. On top of each child chain, more chains can be created and this is what builds a tree-like structure.</p>
<p>Deposits and withdrawals of Plasma chain funds with state transitions is enabled by fraud proofs. This ensures enforceable state and exchangeability. It also allows the processing of a greater number of transactions with less data loading on the basic platform. Any user can send funds to another, including those from a different set of participants. These fund transfers can be paid and withdrawn in the native platform coin.</p>
<h3 id="fraud-proofs">Fraud Proofs</h3>
<p>The communication between the child chains and the root chain is secured by fraud proofs. Each child chain has its own mechanisms for validating blocks and a particular fraud-proof implementation, which can be built on top of different consensus algorithms. The most common are Proof of Work, Proof of Stake, and Proof of Authority.</p>
<p>The fraud proofs ensure that in case of malicious activity, users are able to report dishonest nodes, protect their funds and exit the transaction (which involves an interaction with the main chain). In other words, fraud proofs are used as a mechanism through which a Plasma child chain files a complaint to its parent chain or to the root chain.</p>
<p>These proofs use an interactive funds-withdrawal protocol. In order to withdraw a certain amount of funds, an exit time is needed. The exiting party must confirm the outputs via UTXO model requesting a withdrawal. Network participants can then submit a bonded proof that has to be confirmed and tested if any funds have been spent. If the event appears to be wrong, it is treated as fraudulent, and the confirmation is cancelled. With time, another bonded round allows the withdrawal to happen, bonding to state before a committed timestamp. An incorrect Plasma chain can be quickly exited by participants. In case of attack, participants can quickly exit and save their costs, ensuring security within the system.</p>
<p><strong>Example</strong></p>
<p>If Alice keeps 1 ETH in a Plasma chain, for instance, it gets recorded into a block, whereas the consensus is met due to fraud proofs. Further commitments are enforced and submitted on the base chain, and her funds are held in its smart contract:</p>
<p><img alt="" src="https://i.imgur.com/RLsoIkv.jpg" /></p>
<p><img alt="" src="https://i.imgur.com/NbvA4eM.jpg" /></p>
<h2 id="plasma-pros-and-cons">Plasma: Pros and Cons</h2>
<p>Undoubtedly, plasma is a good solution for scalability issues but Plasma does have some drawbacks. Each new plasma iteration reveals a new research problem that needs to be addressed, leading to multiple Plasma variants that navigate deployment trade-offs in different ways. We will compare these different variants in detail below but let's first compare the pros and cons of plasma and it's variants.</p>
<table>
<thead>
<tr>
<th align="left">Pros</th>
<th align="left">Cons</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Plasma will help the Ethereum blockchain scale by taking operations off-chain</td>
<td align="left">Plasma requires a centralized component in order to operate as the off-chain component is managed by authorities</td>
</tr>
<tr>
<td align="left">Lower fees and faster operations also enables computationally intensive applications to run on a blockchain</td>
<td align="left">Long waiting periods(7-14 days) for users who wish to withdraw their funds</td>
</tr>
<tr>
<td align="left">Eliminating significant amount of unnecessary data in the main chain which also reduces the processing bandwidth of nodes</td>
<td align="left">Poor experience for users who don’t have a large number of assets and don’t want to wait weeks to access them</td>
</tr>
<tr>
<td align="left">It is compatible with various on-chain scaling solutions such as sharding, varying block sizes, etc.</td>
<td align="left">New security risks/challenges (primarly for exits) that would need to be addressed to maintain immutability.</td>
</tr>
</tbody>
</table>
<p>Many plasma variants have their own set of drawbacks such as:
* Plasma MVP has time constraints, is a less than ideal user experience, and is vulnerable to network congestion.
* Plasma Cash relies on non-fungible tokens (NFTs) to function which requires heavy transaction histories. You will have to keep track of the value and have to be constantly collecting proofs of non-inclusion, and so when you transfer ownership of the NFT you have to transfer its history as well.</p>
<h2 id="exploring-popular-plasma-flavours">Exploring popular plasma flavours</h2>
<p>There isn’t any single project called "Plasma". Instead, there are lots of different projects that use the tools provided by the Plasma framework/specification.</p>
<p>Currently there are four main distinct versions of the protocol:</p>
<ul>
<li>
<p><strong>Plasma Cash</strong> <br/>
Plasma Cash is a Plasma design primarily built for storing and transferring non-fungible tokens. It is highly scalable because users only ever need to keep track of their own tokens. <br/>
It uses Sparse Merkle Trees (SMT) for non inclusion proofs and hence can only be used for NFTs since SMTs uses indexing.
Each block has a ‘slot’ for each coin (unique deposit). When a coin is spent, a transaction proof is recorded in that coin’s respective slot in the block. <br/>
<em>Note: Coin defragmentation research to support FTs is going on currently</em></p>
</li>
<li>
<p><strong>Plasma Debit</strong> <br/>
Plasma Debit is like Plasma Cash, except every token is a payment channel between the user and the chain operator. It’s sort of like a big Lightning Network hub, but the channels can be transferred just like a Plasma Cash token. Transactions are super fast and you only need to keep track of your own channels.</p>
</li>
<li>
<p><strong>Plasma Prime</strong> <br/>
Plasma Prime is a fancy new design that makes use of RSA accumulators to solve the problem of large history proofs in Plasma Cash.</p>
</li>
<li>
<p><strong>MVP (Minimum Viable Plasma)</strong><br/>
Plasma MVP is a design for an extremely simple UTXO-based Plasma chain. The basic Plasma MVP specification enables high-throughput payment transactions, but does not support more complicated constructions like scripts or smart contracts.</p>
</li>
</ul>
<p>Plasma MVP relies on confirmation signatures because withdrawals are processed in order based on the position of the output being withdrawn. </p>
<p>Users need to sign a signature before making a transaction, wait to see the transaction included in a valid block, and then sign another signature. These second signatures must also be included within a plasma block, reducing block space available for more transactions!</p>
<p><em>Note: Confirmation signatures make for pretty bad user experience. <strong>More Viable Plasma</strong>, also known as <strong>MoreVP</strong>, is an extension to Minimal Viable Plasma that removes the need for confirmation signatures. MoreVP modifies the process through which users can withdraw their funds. The ordering of each withdrawal becomes based on the position of the youngest input to the transaction that created an output.</em></p>
<h3 id="comparing-different-models-of-plasma">Comparing different models of plasma</h3>
<table>
<thead>
<tr>
<th align="left">Plasma Design Component</th>
<th align="left">Plasma MVP</th>
<th align="left">Plasma Cash</th>
<th align="left">Plasma Debit</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Data Structure</td>
<td align="left">Binary Merkle tree</td>
<td align="left">Sparse Merkle Tree</td>
<td align="left">Sparse Merkle tree</td>
</tr>
<tr>
<td align="left">Consensus</td>
<td align="left">Any (PoW,PoA,PoS)</td>
<td align="left">Any (PoW,PoA,PoS)</td>
<td align="left">Single or few operators preferred over because of payment channel structure</td>
</tr>
<tr>
<td align="left">Deposits</td>
<td align="left">UTXOs representation, support for ETH, ERC20</td>
<td align="left">Unique Coin ID for each deposit, NFTs only</td>
<td align="left">Accounts with unique coin IDs for each deposit, NFTs and FTs only</td>
</tr>
<tr>
<td align="left">Fees</td>
<td align="left">Plasma transaction fees to validators and gas fees when exiting/withdrawing to rootchain or other chains</td>
<td align="left">Same as MVP</td>
<td align="left">Users pay via operator-led payment channel instead of directly to other users</td>
</tr>
<tr>
<td align="left">Signatures</td>
<td align="left">Tx signature before block inclusion, confirmation signature post-inclusion</td>
<td align="left">Confirmation signatures to avoid griefing</td>
<td align="left">No confirmation signatures</td>
</tr>
<tr>
<td align="left">Exits/Withdrawals</td>
<td align="left">Proof of unspent UTXO required to exit, priority based on how old UTXO is</td>
<td align="left">Proof of coin’s latest two transactions, proof of block inclusion, no priority</td>
<td align="left">Proof of coin’s latest two transactions, proof that fraction of coin hasn’t been previously spent, proof of block inclusion, no exit priority</td>
</tr>
</tbody>
</table>
<p>Let's compare pros, cons and use cases for each model now</p>
<table>
<thead>
<tr>
<th align="left">Type</th>
<th align="left">Plasma MVP</th>
<th align="left">Plasma Cash</th>
<th align="left">Plasma Debit</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">Pros</td>
<td align="left">Scalable, all signatures sent to operator in PoA, High fungibility</td>
<td align="left">Very scalable, watchers or users themselves need to only keep track of their own coins not all coins on the chain</td>
<td align="left">Very scalable, watchers or users themselves need to only keep track of their own coins, Enables transactions with NFTs and FTs, Efficient balance updates don’t need to be included in blocks as agreement can be made between operator and coinholder (similar to channels)</td>
</tr>
<tr>
<td align="left">Cons</td>
<td align="left">Watchers or users themselves are required to watch and challenge invalid exits, Potential for honest bond slashing if operator withholds blocks and user attempts to re-submit transaction</td>
<td align="left">Coin proofs can be massive, Coins are in fixed denomination, Watchers or users themselves are required to watch and challenge invalid txs with their own coins</td>
<td align="left">Heavy reliance on operator, can be hedged by creating a set of rotating operators, Coin proofs can be massive, Requires operator to lock up significant funds in advance to fund payment channels, Tx size constrained by initial coin deposit size, Enabling decentralized exchange on Debit is non-trivial</td>
</tr>
<tr>
<td align="left">Use Cases</td>
<td align="left">Low-trust use cases (PoA), Exchanges, securities, P2P payments, recurring/bill payments, gaming</td>
<td align="left">Collectibles, Asset management (real estate, art)</td>
<td align="left">Use cases with high-trust of operators, ewallet or service providers, Gaming, Asset Management, P2P payments</td>
</tr>
</tbody>
</table>
<h2 id="resources">Resources</h2>
<ul>
<li><a href="https://plasma.group/">Plasma Group</a></li>
<li><a href="https://www.binance.vision/blockchain/what-is-ethereum-plasma">What is Ethereum Plasma</a></li>
<li><a href="https://media.consensys.net/the-state-of-plasma-1-6b48c1e4b295">The State of Plasma</a></li>
<li><a href="https://medium.com/applicature/what-is-plasma-and-how-does-it-work-15641c95825f">How Plasma Work</a></li>
<li><a href="https://www.learnplasma.org/en/learn/framework.html">Learn Plasma</a></li>
<li><a href="https://www.learnplasma.org/en/learn/compare.html">Comparing plasma models</a></li>
</ul>
                
                  
                
              
              
                


              
            </article>
          </div>
        </div>
      </main>
      
        
<footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-footer-copyright">
        
        <a href="https://etherscan.io/address/0xa19fcdad77c1f0fd184689aca88babcf68010347">Donate: 0xA19FCDaD77C1F0fd184689aca88BabCF68010347</a>
      </div>
      
        
  <div class="md-footer-social">
    <link rel="stylesheet" href="../../../assets/fonts/font-awesome.css">
    
      <a href="https://github.com/ethhub-io/ethhub" class="md-footer-social__link fa fa-github"></a>
    
      <a href="https://twitter.com/ethhub_io" class="md-footer-social__link fa fa-twitter"></a>
    
      <a href="https://medium.com/ethhub" class="md-footer-social__link fa fa-medium"></a>
    
      <a href="https://discordapp.com/invite/gw8AM98" class="md-footer-social__link fa fa-comment"></a>
    
      <a href="https://www.instagram.com/ethhub_io/" class="md-footer-social__link fa fa-instagram"></a>
    
  </div>

      
    </div>
  </div>
</footer>
      
    </div>
    
      <script src="../../../assets/javascripts/application.3a8f445d.js"></script>
      
      <script>app.initialize({version:"1.1.2",url:{base:"../../.."}})</script>
      
    
  </body>
</html>